/*
 *  Erreur.cpp
 *  Ray Tracing
 *
 *  Traitement de erreurs
 *
 *  Created by Jean-Marc Comby + Romain Dequesne on Sun Mar 28 2004.
 *  Copyright (c) 2004. All rights reserved.
 *
 */

#include "Erreur.hpp"

using namespace std;

//constructeurs+destructeurs
/**
 * Constructeur par défaut. L'erreur a un code 0, pas de message ni de
 * "classe" et n'arrête pas le programme.
 */
Erreur::Erreur()
  : arret( false ), code( 0 ), message( "" ), classe( "" )
{}

/**
 * Constructeur usuel. Initialise tous les champs d'un Erreur.
 *
 * @param b booléen signifiant si l'erreur est "récupérable" (\e
 * false) ou critique (\e true, càd causant l'arrêt du programme).
 * @param i code de l'erreur.
 * @param s1 message à afficher.
 * @param s2 nom de la méthode, classe, fonction qui a lancé l'Erreur.
 */
Erreur::Erreur(const bool& b, const int& i, const string& s1, const string& s2)
  : arret( b ), code( i ), message( s1 ), classe( s2 )
{}

/**
 * Le destructeur n'a rien de spécial à faire.
 */
Erreur::~Erreur()
{}

/**
 * Méthode qui écrit un rapport dans un fichier de log. Le fichier est
 * ouvert en mode "append", ce qui veut dire que l'on écrit à la suite
 * du contenu déjà existant.
 *
 * @param s nom du fichier de log.
 */
void Erreur::ecrire(const string& s)
{
  ofstream sortie(s.c_str(), ios::app); //ouvre le flot et l extension signifie qu il va ecrire a la fin des donnees existantes
  if ( sortie.fail() )
      cout << "Erreur : impossible d'écrire dans le fichier " << s << endl;
  else 
    {
      {
	sortie << "Erreur #" << code << " - <" << message
	       << "> in class <" << classe<< "> on " << flush;
	time_t temps_act;
	time(&temps_act);   // Determiner le temps actuel en secondes
	sortie << ctime(&temps_act) << flush; // ecrit date dans fichier
      }
      if(arret) sortie << " crashed the program" << endl;
      else sortie << " generated an exception" << endl;
    }
  sortie.close(); //ferme le flot
}
